package com.zhaojonhy.zhaopangwb.adapter;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.zhaojonhy.zhaopangwb.R;
import com.zhaojonhy.zhaopangwb.bean.PicUrls;
import com.zhaojonhy.zhaopangwb.utils.DisplayUtils;
import com.zhaojonhy.zhaopangwb.utils.GifImageUtils;

import java.util.ArrayList;

import pl.droidsonroids.gif.GifImageView;


/**
 * Created by Administrator on 2016/10/19.
 */

public class ImageBrowserAdapter extends PagerAdapter {

    private static final String TAG = ImageBrowserAdapter.class.getSimpleName() ;

    private Activity context ;
    private ArrayList<PicUrls> picUrls ;
    private ArrayList<View> picViews ;

    private ImageLoader imageLoader ;

    public ImageBrowserAdapter(Activity context, ArrayList<PicUrls> picUrls) {
        this.context = context ;
        this.picUrls = picUrls ;
        this.imageLoader = ImageLoader.getInstance() ;
    }

    private void initScrollView() {
        //viewPage 显示每一页都相当于有一个视图
        picViews = new ArrayList<View>() ;
        //viewPage 显示每一页都相当于有一个视图(可滑动的ScrollView)
        for(int i=0; i <picUrls.size(); i++) {
            View view = View.inflate(context , R.layout.item_image_browser,null) ;
            picViews.add(view) ;
        }

    }

    private void initWebView() {
        //viewPage 显示每一页都相当于有一个视图
        picViews = new ArrayList<View>() ;
        //viewPage 显示每一页都相当于有一个视图(可滑动的ScrollView)
        for(int i=0; i <picUrls.size(); i++) {
            View view = View.inflate(context , R.layout.gif_webview,null) ;
            picViews.add(view) ;
        }

    }

    @Override
    public int getCount() {
        //判断单图是没有无限轮播的
        if( picUrls.size() > 1) {
            return Integer.MAX_VALUE ;//返回int的最大值
        }
        return picUrls.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object o) {
        return view == o;
    }

    @Override
    public View instantiateItem(ViewGroup container, int position) {

        //因为返回的最大值是int的最大值
        int index = position % picUrls.size() ;
        //动态计算图片的宽高
        PicUrls picUrl = picUrls.get(index) ;
        //把网络获取的图片地址传入,选取中质量还是高质量的图片
        final String url = picUrl.isShowOriImg() ? picUrl.getBmiddle_pic() : picUrl.getBmiddle_pic() ;

        //初始化视图
        if( (url.substring(url.lastIndexOf(".") + 1)).equals("gif") ) {
            initWebView() ;
        }else {
            initScrollView() ;
        }

        //获取当前的视图对象
        View view = picViews.get(index) ;

        if( !(url.substring(url.lastIndexOf(".") + 1)).equals("gif") ) {
            //获取当前的Image控件
            final ImageView iv_image_browser = (ImageView)view.findViewById(R.id.iv_image_browser) ;

            imageLoader.loadImage(url, new ImageLoadingListener() {
                @Override
                public void onLoadingStarted(String s, View view) {
                    //开始
                }

                @Override
                public void onLoadingFailed(String s, View view, FailReason reason) {
                    //失败
                    Log.d(TAG, "url---->" + "onLoadingFailed");
                }

                @Override
                public void onLoadingComplete(String s, View view, Bitmap bitmap) {
                    Log.d(TAG, "url---->" + "onLoadingComplete");
                    //完成
                    //获取屏幕的宽度
                    int screenWidthPixels = DisplayUtils.getScreenWidthPixels(context);
                    int screenHeightPixels = DisplayUtils.getScreenHeightPixels(context);
                    //计算原图的比例大小
                    float scale = (float) bitmap.getHeight() / bitmap.getWidth();
                    //计算成相对应的图片高度
                    int height = (int) (screenWidthPixels * scale);
                    //判断图片的高度是否大于屏幕的高度
                    if (height < screenHeightPixels) {
                        height = screenHeightPixels;
                    }
                    //然后把获取的图片高度和屏幕宽度设置为图片的宽高
                    LayoutParams params = iv_image_browser.getLayoutParams();
                    params.height = height;
                    params.width = screenWidthPixels;
                    iv_image_browser.setImageBitmap(bitmap);
                }

                @Override
                public void onLoadingCancelled(String s, View view) {
                    //取消
                    Log.d(TAG, "url---->" + "onLoadingCancelled");
                }
            });

        }else {
            WebView webView = (WebView)view.findViewById(R.id.gifWebview) ;
            WebSettings wSettings;
            //获取WebSettings对象
            wSettings = webView.getSettings();
            //启用支持视窗meta标记（可实现双击缩放）
            //设置载入页面自适应手机屏幕，居中显示
            // setUseWideViewPort是设置webview推荐使用的窗口，设置为true。
            //setLoadWithOverviewMode是设置webview加载的页面的模式，也设置为true。
            //这方法可以让你的页面适应手机屏幕的分辨率，完整的显示在屏幕上，可以放大缩小(推荐使用)。
            wSettings.setUseWideViewPort(true);
//            //以缩略图模式加载页面
            wSettings.setLoadWithOverviewMode(true);
            //设置js可以直接打开窗口，如window.open()，默认为false
//            wSettings.setJavaScriptCanOpenWindowsAutomatically(true);
            //启用JavaScript支持
//            wSettings.setJavaScriptEnabled(true);
            webView.loadUrl(url);
        }

        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View)object);
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    public PicUrls getPic(int position) {
        return picUrls.get(position % picUrls.size()) ;
    }

    public Bitmap getBitmap(int position){
        Bitmap bitmap = null ;
        //获取当前的视图对象
        View view = picViews.get( position % picUrls.size() ) ;
        //获取当前的ImageView控件
        ImageView iv_image_browser = (ImageView)view.findViewById(R.id.iv_image_browser) ;
        //去获取ImageView的图片部分，只能获取drawble不能直接获取Bitmap
        Drawable drawable = iv_image_browser.getDrawable() ;
        //对于ImageView不一定显示是Bitmap对象，也有可能是其他类型的drawble，进行类型判断(Bitmap类型的Drawble)
        if(drawable != null && drawable instanceof BitmapDrawable){
            //把他转成Bitmap对象
            BitmapDrawable bd = (BitmapDrawable) drawable ;
            bitmap = bd.getBitmap() ;
        }
        return bitmap ;
    }


}
